/**
 * 
 */
package org.youisoft.summer.evaluator.registry;

/**
 * @author zijiang.jl
 *
 */
public interface Registry {
	
	/**
	 * 
	 * @param object
	 */
	public void register(Object object);
	
	
	/**
	 * 
	 * @param clazz
	 */
	public void register(Class<?> clazz);
	
	
	/**
	 * 
	 * @param name
	 * @param object
	 */
	public void register(String name,Object object);
	
	/**
	 * 
	 * @param name
	 * @param alias
	 */
	public void registerAlias(String name,String... alias);
	
	
	
	/**
	 * 
	 * @param name
	 */
	public void unRegister(String name);
	
	
	/**
	 * 
	 * @param cName
	 * @return
	 */
	public Object find(String name);
	
	/**
	 * 
	 * @param <C>
	 * @param name
	 * @param exptected
	 * @return
	 */
	public <C> C find(String name,Class<C> expected);

}
